package top.roadvast.rabbitmq.provider;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import top.roadvast.rabbitmq.utils.RabbitmqUtil;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

/**
 * @Author 郭泽鹏
 * @Date 2021/12/26 21:37
 * @Version 1.0
 * @Description rabbitmq六种工作模式之一：扇出模式
 */
public class FanoutProvider {
    public static void main(String[] args) throws IOException {
        Connection connection = RabbitmqUtil.getConnection();
        Channel channel = connection.createChannel();

        //定义名字为logs的交换机,交换机类型为fanout
        //这一步是必须的，因为禁止发布到不存在的交换机
        channel.exchangeDeclare("logs", "fanout");

        while(true) {
            System.out.println("输入消息：");
            final String msg = new Scanner(System.in).nextLine();
            if ("exit".equalsIgnoreCase(msg)) {
                break;
            }
            //第一个参数,向指定的交换机发送消息
            //第二个参数,不指定routingKey,由消费者向交换机绑定队列
            //如果还没有队列绑定到交换器，消息就会丢失，
            //但这对我们来说没有问题;即使没有消费者接收，我们也可以安全地丢弃这些信息。
            channel.basicPublish("logs", "", null, msg.getBytes(StandardCharsets.UTF_8));
            System.out.println("消息已发出。");
        }
        //关闭连接
        RabbitmqUtil.closeConnection(connection, channel);
    }
}
